package main

import (
	user "awesomeProject/kitex_gen/user/userservice"
	"awesomeProject/rpc/user/config"
	"fmt"
	"github.com/cloudwego/kitex/server"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"log"
	"net"
)

var DB *gorm.DB // 全局数据库连接实例

func initDB(cfg *config.Config) (*gorm.DB, error) {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		cfg.MySQL.Username,
		cfg.MySQL.Password,
		cfg.MySQL.Host,
		cfg.MySQL.Port,
		cfg.MySQL.Database,
	)
	return gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

func main() {
	// 加载配置文件
	cfg, err := config.LoadConfig("config.yaml")
	if err != nil {
		log.Fatalf("Failed to load configuration: %v", err)
	}

	// 初始化数据库连接
	db, err := initDB(cfg)
	if err != nil {
		log.Fatalf("Failed to initialize database connection: %v", err)
	}
	DB = db // 将数据库实例赋值给全局变量

	// 初始化服务器地址
	addr, _ := net.ResolveTCPAddr("tcp",
		fmt.Sprintf("%s:%d", cfg.Server.Address, cfg.Server.Port))

	// 启动 Kitex 服务
	svr := user.NewServer(new(UserServiceImpl), server.WithServiceAddr(addr))

	err = svr.Run()
	if err != nil {
		log.Println(err.Error())
	}
}
